package cn.kgc.itrip.service.linkUserService;

import cn.kgc.itrip.common.DtoUtil;
import cn.kgc.itrip.common.EmptyUtils;
import cn.kgc.itrip.common.RedisUtils;
import cn.kgc.itrip.dto.Dto;
import cn.kgc.itrip.mapper.itripUserLinkUser.ItripUserLinkUserMapper;
import cn.kgc.itrip.mapper.userInfo.UserInfoMapper;
import cn.kgc.itrip.pojo.ItripUserLinkUser;
import cn.kgc.itrip.vo.userinfo.ItripAddUserLinkUserVO;
import cn.kgc.itrip.vo.userinfo.ItripModifyUserLinkUserVO;
import cn.kgc.itrip.vo.userinfo.ItripSearchUserLinkUserVO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @program: love_travel
 * @description: UserInfo接口实现类
 * @author: Mr.Wang
 * @create: 2020-03-27 15:32
 **/

@Service
public class UserInfoServiceImpl implements UserInfoService {

    @Resource
    private RedisUtils redisUtils;

    @Resource
    private UserInfoMapper userInfoMapper;

    @Resource
    private ItripUserLinkUserMapper itripUserLinkUserMapper;

    /**
     * 新增联系人
     * @param itripAddUserLinkUserVO
     * @param request
     * @return
     */
    @Override
    public Dto addUserLink(ItripAddUserLinkUserVO itripAddUserLinkUserVO, HttpServletRequest request)throws Exception{
        //从头部中取出token
        String token = request.getHeader("token");
        String userAgent = request.getHeader("user-agent");
        //判断token是否存在
        if (!redisUtils.isExists(token)){
            return DtoUtil.returnFail("false","100000");
        }
        //判断值是否为空
        if (EmptyUtils.isEmpty(itripAddUserLinkUserVO.getLinkUserName())||
                EmptyUtils.isEmpty(itripAddUserLinkUserVO.getLinkIdCardType())||
                EmptyUtils.isEmpty(itripAddUserLinkUserVO.getUserId())||
                EmptyUtils.isEmpty(itripAddUserLinkUserVO.getLinkPhone())){
            return DtoUtil.returnFail("false","100412");
        }
        //如果都存在，那么进行判断userId是否一致
        String[] split = token.split("-");
        if (split[2].equals(itripAddUserLinkUserVO.getUserId())){
            return DtoUtil.returnFail("false","100411");
        }
        //如果token存在，且vo不为空，则进行判断，该联系人是否已存在
        int i=0;
        i=userInfoMapper.findByUserId(itripAddUserLinkUserVO.getUserId(),itripAddUserLinkUserVO.getLinkPhone());
        //判断如果i大于0，那么该联系人已存在
        if (i>0){
            return DtoUtil.returnFail("false","100411");
        }
        //如果不大与0，则进行添加
        ItripUserLinkUser itripUserLinkUser=null;

        //赋值
        itripUserLinkUser.setUserId(Integer.valueOf(split[2]));
        itripUserLinkUser.setLinkPhone(itripAddUserLinkUserVO.getLinkPhone());
        itripUserLinkUser.setLinkUserName(itripAddUserLinkUserVO.getLinkUserName());
        itripUserLinkUser.setLinkIdCard(itripAddUserLinkUserVO.getLinkIdCard());
        itripUserLinkUser.setLinkIdCardType(itripAddUserLinkUserVO.getLinkIdCardType());
        itripUserLinkUser.setCreationDate(new Date());
        //添加数据
        int in=0;
        in = itripUserLinkUserMapper.insertItripUserLinkUser(itripUserLinkUser);
        //判断integer
        if (in>0){
            //如果>0，则添加成功
            return DtoUtil.returnSuccess();
        }
        return DtoUtil.returnFail("false","100411");
    }

    /**
     * 删除联系人（未完成）
     * @param ids
     * @param token
     * @return
     */
    @Override
    public Dto delLinkuser(Integer ids, String token) throws Exception{
        //判断token是否存在
        if (!redisUtils.isExists(token)){
            return DtoUtil.returnFail("false","100000");
        }
        //判断ids是否存在
        if (!EmptyUtils.isEmpty(ids)){
            return DtoUtil.returnFail("false","100433");
        }
        //如果全部存在，则查询这个联系人是否有订单未完成
        //1.通过ids查找联系人
        ItripUserLinkUser itripUserLinkUser=itripUserLinkUserMapper.getItripUserLinkUserById(Long.valueOf(ids));
        //判断itripUserLinkUser是否未空
        if (EmptyUtils.isEmpty(itripUserLinkUser)){
            return DtoUtil.returnFail("false","100433");
        }
        //通过查找到的联系人，查询该联系人是否有订单
        int i=userInfoMapper.findByUserOrder(itripUserLinkUser.getUserId(),itripUserLinkUser.getLinkUserName());
        //判断，如果i>0，则联系人有未完成的订单
        if (i>0){
            return DtoUtil.returnFail("false","100431");
        }
        //如果没有订单，则删除联系人
        int ii=itripUserLinkUserMapper.deleteItripUserLinkUserById(Long.valueOf(ids));
        if (ii>0){
            return DtoUtil.returnFail("false","100432");
        }
        return DtoUtil.returnSuccess();
    }

    /**
     * 查询联系人
     * @param itripSearchUserLinkUserVO
     * @param token
     * @return
     */
    @Override
    public Dto findLinkUser(ItripSearchUserLinkUserVO itripSearchUserLinkUserVO, String token) {
        //判断token是否存在
        if (!redisUtils.isExists(token)){
            return DtoUtil.returnFail("false","100000");
        }
        String[] split = token.split("-");
        int i = Integer.parseInt(split[2].toString());
        //如果token存在，那么查询
        List<ItripUserLinkUser> linkUser =userInfoMapper.findLinkUser(i);
        //判断linkUser是否为空
        List<ItripSearchUserLinkUserVO> userList=new ArrayList<>();
        if (EmptyUtils.isNotEmpty(linkUser)){
            //如果不为空，则便利数据
            ItripSearchUserLinkUserVO userVO=null;
            for (ItripUserLinkUser itripUserLinkUser:linkUser){
                userVO=new ItripSearchUserLinkUserVO();
                BeanUtils.copyProperties(itripUserLinkUser,userVO);
                userList.add(userVO);
            }
            return DtoUtil.returnDataSuccess(userVO);
        }
        return DtoUtil.returnFail("false","100401");
    }


    /**
     * 修改联系人
     * @param token
     * @param itripModifyUserLinkUserVO
     * @return
     */
    @Override
    public Dto modUserLinkUser(String token, ItripModifyUserLinkUserVO itripModifyUserLinkUserVO) throws Exception{
        //判断token是否存在
        if (!redisUtils.isExists(token)){
            return DtoUtil.returnFail("false","100000");
        }
        //判断值是否为空
        if (EmptyUtils.isEmpty(itripModifyUserLinkUserVO.getLinkUserName())||
                EmptyUtils.isEmpty(itripModifyUserLinkUserVO.getLinkIdCardType())||
                EmptyUtils.isEmpty(itripModifyUserLinkUserVO.getUserId())||
                EmptyUtils.isEmpty(itripModifyUserLinkUserVO.getId())||
                        EmptyUtils.isEmpty(itripModifyUserLinkUserVO.getLinkIdCard())){
            return DtoUtil.returnFail("false","100422");
        }
        //如果都存在，那么进行判断userId是否一致
        String[] split = token.split("-");
        if (split[2].equals(itripModifyUserLinkUserVO.getUserId())){
            return DtoUtil.returnFail("false","100421");
        }
        //如果token存在，且vo不为空，则进行判断，该联系人是否已存在
        int i=0;
        i=userInfoMapper.findByUser(itripModifyUserLinkUserVO.getUserId(),itripModifyUserLinkUserVO.getLinkUserName());
        //判断如果i大于0，那么该联系人已存在
        if (i>0){
            return DtoUtil.returnFail("false","100411");
        }
        //如果不大与0，则进行添加
        ItripUserLinkUser itripUserLinkUser=null;

        //赋值
        itripUserLinkUser.setUserId(Integer.valueOf(split[2]));
        itripUserLinkUser.setLinkPhone(itripModifyUserLinkUserVO.getLinkPhone());
        itripUserLinkUser.setLinkUserName(itripModifyUserLinkUserVO.getLinkUserName());
        itripUserLinkUser.setLinkIdCard(itripModifyUserLinkUserVO.getLinkIdCard());
        itripUserLinkUser.setLinkIdCardType(itripModifyUserLinkUserVO.getLinkIdCardType());
        itripUserLinkUser.setModifyDate(new Date());
        //添加数据
        int in=0;
        in = itripUserLinkUserMapper.updateItripUserLinkUser(itripUserLinkUser);
        //判断integer
        if (in>0){
            //如果>0，则添加成功
            return DtoUtil.returnSuccess();
        }
        return DtoUtil.returnFail("false","100421");
    }
}
